package org.tissou.client.Panel_Premier.operations_tab.Operations;


import org.tissou.client.Services.*;
import org.tissou.client.widgets.Label_MessageInformation;
import com.google.gwt.user.client.ui.*;
import com.google.gwt.user.datepicker.client.DateBox;
import com.google.gwt.i18n.client.DateTimeFormat;


import java.util.Date;




/**
 * Created by IntelliJ IDEA.
 * User: Claire
 * Date: 03/03/2009
 * Time: 21:12:32
 * To change this template use File | Settings | File Templates.
 */
public class Operation_Dette extends Operation_Base {
  DockPanel entrees = new DockPanel();
  DockPanel choix_categorie = new DockPanel();
  DockPanel choix_categorie_arbre = new DockPanel();
  DockPanel choix_categorie_checkbox = new DockPanel();
  DockPanel choix_comptes = new DockPanel();
  DockPanel panel_debourseur = new DockPanel();
  DockPanel panel_debourseur_compte = new DockPanel();
  DockPanel panel_receveur = new DockPanel();
  DockPanel panel_receveur_compte = new DockPanel();

  RadioButton pret = new RadioButton("choix3", "Pret");
  RadioButton remboursement = new RadioButton("choix3", "Remboursement");

  Label label_categorie_specifique= new Label("Voulez-vous que cette operation soit associee a une " +
          "categorie specifique ? Si non, elle sera associee a la categorie 'Remboursement' ou 'Pret'.");
  CheckBox checkbox_categorie_specifique = new CheckBox();
  Label label_categorie_specifique_checkbox = new Label ("Oui");
  ArbreDeCategories arbre_categorie = new ArbreDeCategories();
  
  Label proprietaire_debourseur_label = new Label("De: ");
  Label proprietaire_receveur_label = new Label("A: ");
  ArbreDeProprietaires proprietaire_debourseur = new ArbreDeProprietaires();
  ArbreDeProprietaires proprietaire_receveur = new ArbreDeProprietaires();
  ArbreDeComptes comptes_debourseur;
  ArbreDeComptes comptes_receveur;

  TextBox somme = new TextBox();
  Label somme_Label = new Label("Somme:");

  CheckBox verifie = new CheckBox("Verifie?");

  Button ok = new Button("OK");

  protected void MiseEnPlaceStyles() {
    datePicker.addStyleName("defaultstyle");
    datePicker.setFormat(new DateBox.DefaultFormat(DateTimeFormat.getFormat("dd/MM/yyyy")));
    proprietaire_debourseur.addStyleName("defaultstyle");
    proprietaire_receveur.addStyleName("defaultstyle");
    
    panel_debourseur_compte.addStyleName("dockPanelProprioComptes");
    panel_receveur_compte.addStyleName("dockPanelProprioComptes");

    choix_categorie_arbre.addStyleName("dockPanelCategories");
    
  }

  protected void MiseEnPlaceParametresWidgets() {
    datePicker.setValue(new Date());
  }

  protected void MiseEnPlaceParametresPanel() {
    entrees.add(pret, DockPanel.WEST);
    entrees.add(remboursement, DockPanel.WEST);
    entrees.add(date_Label, DockPanel.WEST);
    entrees.add(datePicker, DockPanel.WEST);
    entrees.add(somme_Label, DockPanel.WEST);
    entrees.add(somme, DockPanel.WEST);

    choix_categorie_checkbox.add(checkbox_categorie_specifique, DockPanel.WEST);
    choix_categorie_checkbox.add(label_categorie_specifique_checkbox, DockPanel.WEST);
    choix_categorie_arbre.add(arbre_categorie, DockPanel.NORTH);
    choix_categorie.add(label_categorie_specifique, DockPanel.NORTH);
    choix_categorie.add(choix_categorie_checkbox, DockPanel.NORTH);
    choix_categorie.add(choix_categorie_arbre, DockPanel.NORTH);

    choix_comptes.setHeight("300px");
    panel_debourseur.setWidth("360px");
    panel_debourseur.add(proprietaire_debourseur_label, DockPanel.WEST);
    panel_debourseur.add(proprietaire_debourseur, DockPanel.WEST);
    panel_debourseur.add(panel_debourseur_compte, DockPanel.WEST);

    panel_receveur.setWidth("360px");
    panel_receveur.add(proprietaire_receveur_label, DockPanel.WEST);
    panel_receveur.add(proprietaire_receveur, DockPanel.WEST);
    panel_receveur.add(panel_receveur_compte,DockPanel.WEST);
  }

  protected void MiseEnPlaceActions() {

    proprietaire_debourseur.addTreeListener(new TreeListener(){

      public void onTreeItemSelected(TreeItem item) {
        panel_debourseur_compte.clear();
        comptes_debourseur = CreerArbreCompteAvecTreeListener(DonnerProprietaire(item));
        panel_debourseur_compte.add(comptes_debourseur, DockPanel.WEST);
      }

      public void onTreeItemStateChanged(TreeItem item) {

      }
    });

    proprietaire_receveur.addTreeListener(new TreeListener(){

      public void onTreeItemSelected(TreeItem item) {
        panel_receveur_compte.clear();
        comptes_receveur = CreerArbreCompteAvecTreeListener(DonnerProprietaire(item));
        panel_receveur_compte.add(comptes_receveur, DockPanel.WEST);
      }

      public void onTreeItemStateChanged(TreeItem item) {

      }
    });

     ok.addClickListener(new ClickListener(){
      public void onClick(Widget sender) {
        EnvoyerInformationServeur(FormerParametresOperation());
      }
    });
  }

  protected void MiseEnPlacePanels() {
    principal.add(message_information, DockPanel.NORTH);
    principal.setCellHeight(message_information, "40px");
    principal.add(entrees,  DockPanel.NORTH);

    choix_comptes.add(panel_debourseur, DockPanel.WEST);
    choix_comptes.add(panel_receveur, DockPanel.WEST);
    choix_comptes.add(choix_categorie, DockPanel.WEST);

    principal.add(choix_comptes,  DockPanel.NORTH);
    principal.add(ok,DockPanel.NORTH);
  }

  public Parametres FormerParametresOperation(){
    Parametres parametres;
    if(pret.getValue()){
      /*
      Operation_Pret:
        Date Date = date;
        Boolean Verifie = verifie;
        OperationFactoryInfos.TypeOperation Typeoperation = OPERATION_PRET;

        List<CategorieInfos> Categories = void;
        List<ProprietaireInfos> Proprietaires = void;
        List<Compte> Comptes = compte debourseur, compte receveur;
        List<String> Libelles = new ArrayList<String>() = void;
        List<Dette> Dettes = new ArrayList<Dette>() = void;
        List<MonnaieInfos> Monnaies = new ArrayList<MonnaieInfos>() = void;
        List<Float> Sommes = new ArrayList<Float>() = somme concernee;
      */
      parametres = new Parametres(getDate(), verifie.getValue(),
          OperationFactoryInfos.TypeOperation.OPERATION_PRET);
      try{parametres.ajouterCompte(comptes_debourseur.donneLeCompteSelectionne());
      } catch(MonException e){
        message_information.setMessage(Label_MessageInformation.Etat.MAUVAISEENTREE, e.getMessage());
        throw e;
      }
      try{parametres.ajouterCompte(comptes_receveur.donneLeCompteSelectionne());
      } catch(MonException e){
        message_information.setMessage(Label_MessageInformation.Etat.MAUVAISEENTREE, e.getMessage());
        throw e;
      }

      if (checkbox_categorie_specifique.getValue()){
        try{parametres.ajouterCategorie(arbre_categorie.donneLaCategorieSelectionnee());
        } catch (MonException e){
          message_information.setMessage(Label_MessageInformation.Etat.MAUVAISEENTREE, e.getMessage());
          throw new MonException(e.getMessage());
        }

      }

      try {
        Float s = Float.valueOf(somme.getText().trim());
        parametres.ajouterSomme(s);
      } catch (NumberFormatException nfe) {
        MessageErreurEntree("La somme n'a pas ete rentree correctement. L'operation n'a pas ete entree.");
        throw new MonException("NumberFormatException: " + nfe.getMessage());
      }
    }

    else if (remboursement.getValue()){
      /*
      Operation_Remboursement:
        Date Date = date;
        Boolean Verifie = verifie;
        OperationFactoryInfos.TypeOperation Typeoperation = OPERATION_REMBOURSEMENT;

        List<CategorieInfos> Categories = void;
        List<ProprietaireInfos> Proprietaires = void;
        List<Compte> Comptes = compte debourseur, compte receveur;
        List<String> Libelles = new ArrayList<String>() = void;
        List<Dette> Dettes = new ArrayList<Dette>() = void;
        List<MonnaieInfos> Monnaies = new ArrayList<MonnaieInfos>() = void;
        List<Float> Sommes = new ArrayList<Float>() = somme concernee;
      */
      parametres = new Parametres(getDate(), verifie.getValue(),
          OperationFactoryInfos.TypeOperation.OPERATION_REMBOURSEMENT);
      try{parametres.ajouterCompte(comptes_debourseur.donneLeCompteSelectionne());
      } catch(MonException e){
        message_information.setMessage(Label_MessageInformation.Etat.MAUVAISEENTREE, e.getMessage());
        throw e;
      }
      try{parametres.ajouterCompte(comptes_receveur.donneLeCompteSelectionne());
      } catch(MonException e){
        message_information.setMessage(Label_MessageInformation.Etat.MAUVAISEENTREE, e.getMessage());
        throw e;
      }
       if (checkbox_categorie_specifique.getValue()){
        try{parametres.ajouterCategorie(arbre_categorie.donneLaCategorieSelectionnee());
        } catch (MonException e){
          message_information.setMessage(Label_MessageInformation.Etat.MAUVAISEENTREE, e.getMessage());
          throw new MonException(e.getMessage());
        }
      }
      try {
        Float s = Float.valueOf(somme.getText().trim());
        parametres.ajouterSomme(s);
      } catch (NumberFormatException nfe) {
        MessageErreurEntree("La somme n'a pas ete rentree correctement. L'operation n'a pas ete entree.");
        throw new MonException("NumberFormatException: " + nfe.getMessage());
      }
    }
    else {
      MessageErreurEntree("Tu n'as pas dit si tu voulais une dette ou un remboursement");
      parametres = null;
    }

    return parametres;
  }

@Override
public void InitialiserValeurs() {
	somme.setText("");
	
}
}
